const { MessageChannelMain } = require("electron");
const { app, BrowserWindow, ipcMain } = require("electron/main");
// require("electron-reload")(__dirname);
const path = require("path");
const url = require("url");

app.whenReady().then(() => {
  const win = new BrowserWindow({
    width: 600,
    height: 600,
    webPreferences: {
      nodeIntegration: true, // 允许在渲染进程（窗口）中使用node.js
      contextIsolation: false, // 关闭上下文隔离
    },
  });
  win.loadURL(
    url.format({
      protocol: "file",
      pathname: path.join(__dirname, "window/window.html"),
    })
  ); // 必须这么整，要不然window会从根目录开始找);
  // win.webContents.openDevTools();
});

// ipcMain.on("port", (event) => {
//   const port2 = event.ports[0];
//   port2.on("message", (event) => {
//     console.log(event.data); // 读取渲染进程发来的数据
//     // 主进程再给渲染进程传递一些消息
//     port2.postMessage("主进程：我收到消息了，我们周日见！");
//   });
//   port2.start(); // 开启端口
// });

// 监听请求返回接口
ipcMain.on("request-port", (event) => {
  // 创建通信端口; electron提供的MessageChannelMain
  // port1 主进程使用， port2渲染进程使用
  const { port1, port2 } = new MessageChannelMain();
  // ipcMain.postMessage("");
  event.sender.postMessage("deliver-port", null, [port2]);
  port1.on("message", (event) => {
    if (event.data === "start") {
      // 开始处理数据，并返回给port2所在的渲染进程
      calcData(port1);
    }
  });
  port1.start();
});
// 模拟数据处理 以及返回数据
function calcData(port) {
  const interval = setInterval(() => {
    const data = Math.random().toFixed(2);
    port.postMessage(data);
  }, 2000);
}
